package myerr

import "fmt"

// 自定义错误类型（可选）
type MyError struct {
	Code int    `json:"code"`
	Msg  string `json:"msg"`
}

func (e *MyError) Error() string {
	return fmt.Sprintf("%d:%s", e.Code, e.Msg)
}

func errMsg(code int, msg string) *MyError {
	return &MyError{
		Code: code,
		Msg:  msg,
	}
}

// 异常
var (
	CODE_401 = 401 // 认证异常
	CODE_403 = 403 // 权限异常
	CODE_404 = 404 // 不存在
	CODE_405 = 405 // 请求处理异常
	CODE_500 = 500 // 服务端异常

	// 系统错误
	ERR_SYS_401 = errMsg(500401, "认证失败,无法访问系统资源")
	ERR_SYS_403 = errMsg(500403, "当前操作没有权限")
	ERR_SYS_404 = errMsg(500404, "访问资源不存在")
	ERR_SYS_405 = errMsg(500405, "操作失败,请检查请求内容是否正确") // 系统应友好提示
	ERR_SYS_500 = errMsg(500500, "系统未知错误，请反馈给管理员")

	ERR_SYS_SERVER = errMsg(500100, "未知异常")
	ERR_SYS_ARGS   = errMsg(500101, "参数错误")
	ERR_SYS_OPER   = errMsg(500102, "操作失败")

	ERR_LOGIN        = errMsg(500103, "账号或密码错误")
	ERR_LOGINOUT     = errMsg(500104, "登出失败")
	ERR_LOGIN_VERIFY = errMsg(500105, "验证码验证失败")
	ERR_LOGIN_LOCK   = errMsg(500106, "账号已锁定")
	ERR_LOGIN_AUTH   = errMsg(500107, "Token认证失败")
	ERR_NOT_ACCOUNT  = errMsg(500108, "账号不存在")
	ERR_PWD          = errMsg(500109, "密码错误")
	ERR_LOGIN_ARGS   = errMsg(500110, "账号或密码错误")
	ERR_HAS_EXIST    = errMsg(500111, "已存在")
	ERR_NOT_EXIST    = errMsg(500112, "不存在")
	// 数据源异常
	ERR_DB_OPEN = errMsg(500201, "数据库连接失败")
	ERR_DB_READ = errMsg(500202, "数据获取失败")
	// 文件错误
	ERR_FILE_OPEN  = errMsg(500301, "文件打开失败")
	ERR_FILE_REDE  = errMsg(500302, "文件读取失败")
	ERR_FILE_WRITE = errMsg(500303, "文件写入失败")

	// 业务错误
)
